//package com.jzo2o.customer.client;
//
//import cn.hutool.core.util.ObjectUtil;
//import cn.hutool.http.Header;
//import cn.hutool.http.HttpRequest;
//import cn.hutool.json.JSONUtil;
//import cn.xiaozhibang.evaluation.sdk.core.TokenHelper;
//import cn.xiaozhibang.evaluation.sdk.model.domain.CurrentUser;
//import com.jzo2o.common.constants.ErrorInfo;
//import com.jzo2o.common.constants.UserType;
//import com.jzo2o.common.expcetions.CommonException;
//import com.jzo2o.common.model.CurrentUserInfo;
//import com.jzo2o.customer.properties.EvaluationProperties;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.util.Map;
//
///**
// * 评价系统对接http工具类
// *
// * @author itcast
// * @create 2023/9/8 17:52
// **/
//@Component
//public class EvaluationHttpClient {
//    @Resource
//    private EvaluationProperties evaluationProperties;
//
//    /**
//     * 默认连接超时时间
//     */
//    private static final Integer DEFAULT_CONNECTION_TIMEOUT = 3000;
//
//    /**
//     * 默认读取超时时间
//     */
//    private static final Integer DEFAULT_READ_TIMEOUT = 5000;
//
//    /**
//     * post请求
//     *
//     * @param currentUserInfo 当前用户信息
//     * @param url             请求地址
//     * @param parameters      请求参数
//     * @param body            请求体
//     * @return 响应数据
//     */
//    public <T> String post(CurrentUserInfo currentUserInfo, String url, Map<String, Object> parameters, T body) {
//        return post(currentUserInfo, url, parameters, body, null, DEFAULT_CONNECTION_TIMEOUT, DEFAULT_READ_TIMEOUT);
//    }
//
//    /**
//     * post请求，自定义请求头
//     *
//     * @param currentUserInfo 当前用户信息
//     * @param url             请求地址
//     * @param parameters      请求参数
//     * @param body            请求体
//     * @param headers         请求头
//     * @return 响应数据
//     */
//    public <T> String post(CurrentUserInfo currentUserInfo, String url, Map<String, Object> parameters, T body, Map<String, String> headers) {
//        return post(currentUserInfo, url, parameters, body, headers, DEFAULT_CONNECTION_TIMEOUT, DEFAULT_READ_TIMEOUT);
//    }
//
//    /**
//     * post请求，自定义连接时间
//     *
//     * @param currentUserInfo   当前用户信息
//     * @param url               请求地址
//     * @param parameters        请求参数
//     * @param body              请求体
//     * @param headers           请求头
//     * @param connectionTimeout 连接超时时间
//     * @param readTimeout       读取超时时间
//     * @return 响应数据
//     */
//    public <T> String post(CurrentUserInfo currentUserInfo, String url, Map<String, Object> parameters, T body, Map<String, String> headers, Integer connectionTimeout, Integer readTimeout) {
//        //生成token
//        String token = this.generateToken(currentUserInfo);
//
//        //组装请求参数
//        if (ObjectUtil.isNotEmpty(parameters)) {
//            url = getCompleteUrl(url, parameters);
//        }
//
//        //组装请求
//        HttpRequest httpRequest = HttpRequest.post(url)
//                                             .header(Header.AUTHORIZATION, token)
//                                             .setConnectionTimeout(connectionTimeout)
//                                             .setReadTimeout(readTimeout);
//
//        //组装header
//        if (ObjectUtil.isNotEmpty(headers)) {
//            headers.forEach(httpRequest::header);
//        }
//
//        //组装请求体
//        if (ObjectUtil.isNotEmpty(body)) {
//            httpRequest.body(JSONUtil.toJsonStr(body));
//        }
//
//        //发起请求
//        String result = httpRequest.execute().body();
//
//        //校验http响应结果
//        checkResult(result);
//
//        return result;
//    }
//
//    /**
//     * get请求
//     *
//     * @param currentUserInfo 当前用户信息
//     * @param url             请求地址
//     * @param parameters      请求参数
//     * @return 响应数据
//     */
//    public String get(CurrentUserInfo currentUserInfo, String url, Map<String, Object> parameters) {
//        return get(currentUserInfo, url, parameters, DEFAULT_CONNECTION_TIMEOUT, DEFAULT_READ_TIMEOUT);
//    }
//
//    /**
//     * get请求，自定义连接时间
//     *
//     * @param currentUserInfo   当前用户信息
//     * @param url               请求地址
//     * @param parameters        请求参数
//     * @param connectionTimeout 连接超时时间
//     * @param readTimeout       读取超时时间
//     * @return 响应数据
//     */
//    public String get(CurrentUserInfo currentUserInfo, String url, Map<String, Object> parameters, Integer connectionTimeout, Integer readTimeout) {
//        //生成token
//        String token = this.generateToken(currentUserInfo);
//
//        //组装请求参数
//        if (ObjectUtil.isNotEmpty(parameters)) {
//            url = getCompleteUrl(url, parameters);
//        }
//
//        //发起请求
//        String result = HttpRequest.get(url)
//                                   .header(Header.AUTHORIZATION, token)
//                                   .setConnectionTimeout(connectionTimeout)
//                                   .setReadTimeout(readTimeout)
//                                   .execute().body();
//
//        //校验http响应结果
//        checkResult(result);
//
//        return result;
//    }
//
//    /**
//     * delete请求
//     *
//     * @param currentUserInfo 当前用户信息
//     * @param url             请求路径
//     * @param parameters      请求参数
//     * @return 响应数据
//     */
//    public String delete(CurrentUserInfo currentUserInfo, String url, Map<String, Object> parameters) {
//        return delete(currentUserInfo, url, parameters, DEFAULT_CONNECTION_TIMEOUT, DEFAULT_READ_TIMEOUT);
//    }
//
//    /**
//     * delete请求，自定义连接时间
//     *
//     * @param currentUserInfo   当前用户信息
//     * @param url               请求路径
//     * @param parameters        请求参数
//     * @param connectionTimeout 连接超时时间
//     * @param readTimeout       读取超时时间
//     * @return 响应数据
//     */
//    public String delete(CurrentUserInfo currentUserInfo, String url, Map<String, Object> parameters, Integer connectionTimeout, Integer readTimeout) {
//        //生成token
//        String token = this.generateToken(currentUserInfo);
//
//        //组装请求参数
//        if (ObjectUtil.isNotEmpty(parameters)) {
//            url = getCompleteUrl(url, parameters);
//        }
//
//        //发起请求
//        String result = HttpRequest.delete(url)
//                                   .header(Header.AUTHORIZATION, token)
//                                   .setConnectionTimeout(connectionTimeout)
//                                   .setReadTimeout(readTimeout)
//                                   .execute().body();
//
//        //校验http响应结果
//        checkResult(result);
//
//        return result;
//    }
//
//    /**
//     * 校验http响应结果
//     *
//     * @param result http响应
//     */
//    private void checkResult(String result) {
//        String code = JSONUtil.parseObj(result).get("code").toString();
//        if (ObjectUtil.equal("608", code)) {
//            throw new CommonException(ErrorInfo.Code.HTTP_EVALUATION_FAILED, "禁止重复提交");
//        }
//
//        if (ObjectUtil.notEqual("200", code)) {
//            throw new CommonException(ErrorInfo.Code.HTTP_EVALUATION_FAILED, "对接评价系统，http请求失败");
//        }
//    }
//
//    /**
//     * 拼接请求参数
//     *
//     * @param url        请求路径
//     * @param parameters 参数
//     * @return 完整请求地址
//     */
//    private String getCompleteUrl(String url, Map<String, Object> parameters) {
//        StringBuilder stringBuilder = new StringBuilder(url);
//        if (ObjectUtil.isNotEmpty(parameters)) {
//            stringBuilder.append("?");
//
//            parameters.forEach((k, v) -> {
//                stringBuilder.append(k);
//                stringBuilder.append("=");
//                stringBuilder.append(v.toString());
//                stringBuilder.append("&");
//            });
//        }
//        return stringBuilder.substring(0, stringBuilder.length() - 1);
//    }
//
//    /**
//     * 生成评价系统token
//     *
//     * @param currentUserInfo 当前用户信息
//     * @return token
//     */
//    public String generateToken(CurrentUserInfo currentUserInfo) {
//        //配置中心读取应用配置
//        String appId = evaluationProperties.getAppId();
//        String accessKeyId = evaluationProperties.getAccessKeyId();
//        String accessKeySecret = evaluationProperties.getAccessKeySecret();
//
//        //当前用户信息
//        CurrentUser currentUser = new CurrentUser();
//        currentUser.setId(currentUserInfo.getId().toString());
//        currentUser.setNickName(currentUserInfo.getName());
//        currentUser.setUserAvatar(currentUserInfo.getAvatar());
//
//        //生成token
//        if (ObjectUtil.equal(UserType.OPERATION, currentUserInfo.getUserType())) {
//            return TokenHelper.generateTokenOfAdmin(appId, accessKeyId, accessKeySecret, currentUser);
//        } else {
//            return TokenHelper.generateTokenOfUser(appId, accessKeyId, accessKeySecret, currentUser);
//        }
//    }
//}
